import * as fs from 'fs'
import axios from 'axios';

// 基础路径（全局依赖）
let baseUrl = 'http://192.168.43.115:9096'
// 程序名称
let name = 'demo'
// 程序路径前缀
let prefix = '/storage/emulated/0/airscript/model'


// 创建文件或文件夹
async function create(path) {
    // 获取需创建的文件路径(将路径中的 .字符 去掉)
    let filePath = path.substring(1)
    // 获取文件存放在程序中所在的路径
    let pathTemp = `${prefix}${filePath}`
    let strs = pathTemp.split('/')
    let fileName = strs[strs.length - 1]
    let createFilePath = pathTemp.substring(0,strs.length - 2)
    // console.log(fileName, createFilePath)
    // 创建文件的接口路径
    let createUrl = `${baseUrl}/api/file/create`
    // 请求接口 上传该文件内容和路径
    let params = { path: createFilePath, name:fileName, type: (type=='file'?'file':'floder') }
    let config = {
        headers: {
            'Content-Type': 'application/json',
        }
    }
    return await axios.post(createUrl,params,config).then(res => res.data)
}

// 移除文件或文件夹
async function remove(path) {
    // 获取需移除的文件路径(将路径中的 .字符 去掉)
    let filePath = path.substring(1)
    // 获取文件存放在程序中所在的路径
    let removeFilePath = `${prefix}${filePath}`
    // console.log(removeFilePath)
    // 移除文件的接口路径
    let removeUrl = `${baseUrl}/api/file/remove`
    // 请求接口 上传该文件内容和路径
    let params = { path: removeFilePath }
    let config = {
        headers: {
            'Content-Type': 'application/json',
        }
    }
    return await axios.post(removeUrl,params,config).then(res => res.data)
}

// 上传当前文件内容 进行保存
async function save(path) {
    // 获取当前路径下文件的内容
    let content = fs.readFileSync(path, { encoding: 'utf-8' })
    // 获取上传文件路径(将路径中的 .字符 去掉)
    let filePath = path.substring(1)
    // 获取上传文件存放在程序中所在的路径
    let uploadFilePath = prefix + filePath
    // console.log(uploadFilePath)
    // 上传文件的接口路径
    let uploadUrl = `${baseUrl}/api/file/save`
    // 请求接口 上传该文件内容和路径
    let params = { path: uploadFilePath, content }
    let config = {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
        }
    }
    return await axios.post(uploadUrl,params,config).then(res => res.data)
}

// 上传当前文件内容 进行保存
async function run() {
    // 请求停止接口
    await stop()
    // 运行程序的接口路径
    let runUrl = `${baseUrl}/api/model/run?name=${name}`
    // 请求接口 运行程序
    return await axios.post(runUrl).then(res => res.data)
}

// 关闭当前程序
async function stop() {
    // 停止程序的接口路径
    let stopUrl = `${baseUrl}/api/model/stop`
    // 请求接口 停止程序
    return await axios.get(stopUrl).then(res => res.data)
}

// 启动并保存文件
async function runAndSave(path){
    // 获取当前时间戳 后6位
    let timeStamp = `${new Date().getTime()}`.substring(7)
    let uploadResult = await save(path)
    if (uploadResult.code) {
        // 上传文件成功 则开始运行程序
        let runResult = await run()
        if (runResult.code) {
            console.log(`\n${timeStamp}：启动成功`, )
        } else {
            console.log(`\n${timeStamp}：启动失败`, )
        } 
    } else {
        console.log(`\n${timeStamp}：上传文件失败`, )
    }
}

// 在文件变动时，需要执行的方法
export async function runScript(path, type) {
    try {
        if(type == 'create') {
            await create(path)
        } else if(type == 'remove')  {
            await remove(path)
        } else if(type == 'run')
            await runAndSave(path)
    } catch (error) {
        console.log('\n自定义脚本运行失败\n')
    }
}